ServicesAccount (k8s)
https://kubernetes.io/ja/docs/concepts/security/service-accounts/
GPT-4.icon
Pod などのアプリケーションが Kubernetes API にアクセスするときの「身分証明書」 のようなものです。
🔑 簡単に言うと
人間ではなく、アプリケーションのためのアカウント
Pod 内のプロセスが Kubernetes の API(例:Pod の一覧取得など)にアクセスする際に使う
アクセス権限(RBAC)と組み合わせて、「何ができるか」を制御する
AWSサービスロールみたいなやつかmrsekut.icon
👤 比較:UserAccount と ServiceAccount
table:_
種類 主に使う人/モノ 用途
UserAccount 人間(kubectl を使う開発者など) クラスタへの操作(Pod作成・削除など)
ServiceAccount アプリケーション(Pod) アプリケーションがKubernetesのAPIを使う時の認証に使う
🧪 例:ServiceAccount を使う場面
例1: Argo Workflows
Argo のワークフローが Kubernetes 上で Pod を立ち上げたりリソースを操作したりするには、Kubernetes API にアクセスする必要があります。
→ そのときに使うのが ServiceAccount。
例2: Pod から Kubernetes の状態を確認したい場合
code:ts
fetch('https://kubernetes.default.svc/api/v1/namespaces/default/pods')
こんな API 呼び出しを Pod の中からする場合、ServiceAccount が使われ、Pod に自動で埋め込まれたトークンで認証されます。
🛠️ よく見る構成例
code:yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app-sa
namespace: default
この ServiceAccount を Deployment などで指定:
code:yaml
spec:
serviceAccountName: my-app-sa
🔐 アクセス制御(RBAC)と一緒に使う
code:yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-app-binding
roleRef:
kind: Role
name: my-app-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: default
→ 「この ServiceAccount は Pod を一覧する権限を持つ」などを定義できる。